﻿using System;
using System.Data;
using System.Data.OleDb;

namespace XiaoSe.Office
{
    //DLL引用Microsoft.Office.Interop.Excel
    //public class ExcelHelper
    //{
    //    /// <summary>
    //    /// .NET读取Excel 2007的xlsx文件和读取老的.xls文件是一样的，都是用Oledb读取,仅仅连接字符串不同而已。
    //    /// </summary>
    //    /// <param name="FileFullPath">Excel物理路径</param>
    //    /// <param name="SheetName">表名</param>
    //    /// <returns></returns>
    //    public DataTable GetExcelToDataTableBySheet(string FileFullPath, string SheetName)
    //    {
    //        //string strConn = "Provider=Microsoft.Jet.OleDb.4.0;" + "data source=" + FileFullPath + ";Extended Properties='Excel 8.0; HDR=NO; IMEX=1';"; //此连接只能操作Excel2007之前(.xls)文件
    //        string strConn = "Provider=Microsoft.Ace.OleDb.12.0;" + "data source=" + FileFullPath + ";Extended Properties='Excel 12.0; HDR=NO; IMEX=1';";
    //        //此连接可以操作.xls与.xlsx文件
    //        OleDbConnection conn = new OleDbConnection(strConn);
    //        conn.Open();
    //        DataSet ds = new DataSet();
    //        OleDbDataAdapter odda = new OleDbDataAdapter(string.Format("SELECT * FROM [{0}]", SheetName), conn);//("select* from [Sheet1$]", conn);
    //        odda.Fill(ds, SheetName);
    //        conn.Close();
    //        return ds.Tables[0];
    //    }

    //    /// <summary>
    //    /// 根据Excel物理路径获取Excel文件中所有表名，读取Excel文件时，可能一个文件中会有多个Sheet，因此获取Sheet的名称是非常有用的。
    //    /// </summary>
    //    /// <param name="excelFile">Excel物理路径</param>
    //    /// <returns>所有表名</returns>
    //    public string[] GetExcelSheetNames(string excelFile)
    //    {
    //        OleDbConnection objConn = null;
    //        DataTable dt = null;
    //        try
    //        {
    //            //string strConn = "Provider=Microsoft.Jet.OleDb.4.0;" + "data source=" + excelFile + ";Extended Properties='Excel 8.0; HDR=NO; IMEX=1'"; //此连接只能操作Excel2007之前(.xls)文件
    //            string strConn = "Provider=Microsoft.Ace.OleDb.12.0;" + "data source=" + excelFile + ";Extended Properties='Excel 12.0; HDR=NO; IMEX=1'";//此连接可以操作.xls与.xlsx文件
    //            objConn = new OleDbConnection(strConn);
    //            objConn.Open();
    //            dt = objConn.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, null);
    //            if (dt == null)
    //            {
    //                return null;
    //            }
    //            String[] excelSheets = new String[dt.Rows.Count];
    //            int i = 0;
    //            foreach (DataRow row in dt.Rows)
    //            {
    //                excelSheets[i] = row["TABLE_NAME"].ToString();
    //                i++;
    //            }
    //            return excelSheets;
    //        }
    //        catch
    //        {
    //            return null;
    //        }
    //        finally
    //        {
    //            if (objConn != null)
    //            {
    //                objConn.Close();
    //                objConn.Dispose();
    //            }
    //            if (dt != null)
    //            {
    //                dt.Dispose();
    //            }
    //        }
    //    }

    //    /// <summary>
    //    /// 导出Excel
    //    /// </summary>
    //    /// <param name="dt"></param>
    //    /// <param name="filePath"></param>
    //    /// <param name="sheetname"></param>
    //    public void DataTableToExcel(DataTable dt, string filePath, string sheetname)
    //    {
    //        try
    //        {
    //            string strName = filePath;
    //            if (dt.Rows.Count == 0)
    //            {
    //                return;
    //            }
    //            System.Reflection.Missing miss = System.Reflection.Missing.Value;
    //            Microsoft.Office.Interop.Excel.ApplicationClass excel = new Microsoft.Office.Interop.Excel.ApplicationClass();
    //            excel.Application.Workbooks.Add(true);
    //            excel.Visible = false;//若是true，则在导出的时候会显示EXcel界面。
    //            excel.SheetsInNewWorkbook = 1;//只有一个sheet
    //            Microsoft.Office.Interop.Excel.Workbooks books = excel.Workbooks;
    //            Microsoft.Office.Interop.Excel.Workbook book = books.Add(miss);
    //            Microsoft.Office.Interop.Excel.Worksheet sheet = (Microsoft.Office.Interop.Excel.Worksheet)book.ActiveSheet;
    //            sheet.Name = sheetname;

    //            for (int i = 0; i < dt.Columns.Count; i++)
    //            {
    //                excel.Cells[1, i + 1] = dt.Columns[i].Caption;
    //            }
    //            for (int i = 0; i < dt.Rows.Count; i++)
    //            {
    //                for (int j = 0; j < dt.Columns.Count; j++)
    //                {
    //                    excel.Cells[i + 2, j + 1] = dt.Rows[i][j] == null ? "" : "'" + dt.Rows[i][j];
    //                }
    //            }
    //            sheet.SaveAs(strName, miss, miss, miss, miss, miss, Microsoft.Office.Interop.Excel.XlSaveAsAccessMode.xlNoChange, miss, miss, miss);
    //            book.Close(false, miss, miss);
    //            books.Close();
    //            excel.Quit();
    //            System.Runtime.InteropServices.Marshal.ReleaseComObject(sheet);
    //            System.Runtime.InteropServices.Marshal.ReleaseComObject(book);
    //            System.Runtime.InteropServices.Marshal.ReleaseComObject(books);
    //            System.Runtime.InteropServices.Marshal.ReleaseComObject(excel);
    //            GC.Collect();
    //        }
    //        catch
    //        {
    //            GC.Collect();
    //        }
    //    }
    //}
}
